
import ArrayStack from '../First/01_栈结构Stack/02_实现栈结构Stack(重构)' ;
//leetcode
// https://leetcode.cn/problems/valid-parentheses/description/

// 函数接收一个字符串，返回一个Boolean

// 如果有（{[]}）这种情况，则后来的项要先出来与前面的项匹配，是属于后入先出的，所以用栈比较合适

// 1、实例化一个栈


//2、遍历字符串，然后取到每一项，通过switch case去匹配每一项，如果是左括号，就入栈一个右括号，
//如果不是左括号，就出栈一个值与当前项进行对比,不一样说明不是与之匹配的括号，直接return false

// 3、当匹配完后，如果栈不为空，则说明的左括号没有与之对应的右括号，则也返回false，如果栈为空，则说明都刚好匹配上，则返回true

function isValid(s:string):Boolean{
    const stack = new ArrayStack<string>()
    for (let i = 0 ; i < s.length ; i++){
        const c= s[i];

        switch(c){
            case '{':
                stack.push('}');
                break;
            case '[':
                stack.push(']');
                break;
            case '(':
                stack.push(')');
                break;
            default:
                if(c !== stack.pop()) return false;
                break;
        }
    }

    return stack.isEmpty()
}

console.log(isValid('({})'))
console.log(isValid('({}'))
console.log(isValid('({})'))